From: Josselin Mouette Date: Fri, 12 Dec 2014 20:57:11 +0000 (+0100) Subject: background: fix a race condition when loading several animations X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~1225 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=8a4c86263362c;p=gnome-shell.git background: fix a race condition when loading several animations When loading several animations at the same time, the last call overrides the result for all of them. This commit caches all animations separately based on the source's schemas. https://bugzilla.gnome.org/show_bug.cgi?id=741453 --- diff --git a/js/ui/background.js b/js/ui/background.js index a4634526c..e2f9a473b 100644 --- a/js/ui/background.js +++ b/js/ui/background.js @@ -144,6 +144,7 @@ const BackgroundCache = new Lang.Class({ this._pendingFileLoads = []; this._fileMonitors = {}; this._backgroundSources = {}; + this._animations = {}; }, monitorFile: function(file) { @@ -162,12 +163,13 @@ const BackgroundCache = new Lang.Class({ getAnimation: function(params) { params = Params.parse(params, { file: null, + settingsSchema: null, onLoaded: null }); - if (_fileEqual0(this._animationFile, params.file)) { + if (this._animations[params.settingsSchema] && _fileEqual0(this._animationFile, params.file)) { if (params.onLoaded) { let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() { - params.onLoaded(this._animation); + params.onLoaded(this._animations[params.settingsSchema]); return GLib.SOURCE_REMOVE; })); GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded'); @@ -178,12 +180,11 @@ const BackgroundCache = new Lang.Class({ let animation = new Animation({ file: params.file }); animation.load(Lang.bind(this, function() { - this._animationFile = params.file; - this._animation = animation; + this._animations[params.settingsSchema] = animation; if (params.onLoaded) { let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() { - params.onLoaded(this._animation); + params.onLoaded(this._animations[params.settingsSchema]); return GLib.SOURCE_REMOVE; })); GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded'); @@ -403,6 +404,7 @@ const Background = new Lang.Class({ _loadAnimation: function(file) { this._cache.getAnimation({ file: file, + settingsSchema: this._settings.schema_id, onLoaded: Lang.bind(this, function(animation) { this._animation = animation;